<!DOCTYPE html>
<html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-0 vector-toc-not-available vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-0 skin-theme-clientpref-day vector-sticky-header-enabled" lang="de" dir="ltr"><head>
<meta charset="UTF-8">
<title>Threefish</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/png" href="./_res_/favicon.png">
<link rel="canonical" href="https://de.wikipedia.org/wiki/Threefish"> <link href="./_mw_/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.math.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.pygments.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.wikimediamessages.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link href="./_mw_/ext.gadget.citeRef.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.defaultPlainlinks.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonHide.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonLayout.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonStyle.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiDarkmode.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiResponsive.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.specialSearch.css" rel="stylesheet" type="text/css">
<link rel="stylesheet" type="text/css" href="./_mw_/site.styles.css">
<link rel="stylesheet" type="text/css" href="./_mw_/noscript.css">
<link rel="stylesheet" type="text/css" href="./_res_/footer.css">
<link rel="stylesheet" type="text/css" href="./_res_/vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Threefish rootpage-Threefish skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">Threefish</span></h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="contentSub">
<div id="mw-content-subtitle"></div>
</div>
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="de" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="de" dir="ltr"><table class="float-right infobox wikitable" style="font-size:90%; margin-top:0; width:23em;">
<tbody><tr>
<th colspan="2" class="hintergrundfarbe6" style="font-size:105%;">Threefish
</th></tr>
<tr>
<td colspan="2" style="text-align:center;"><small>Struktur einer Runde von Threefish</small>
</td></tr>
<tr>
<td>Entwickler
</td>
<td><a href="Bruce_Schneier" title="Bruce Schneier">Bruce Schneier</a>, <a href="Niels_Ferguson" title="Niels Ferguson">Niels Ferguson</a>, Stefan Lucks, Doug Whiting, <a href="Mihir_Bellare" title="Mihir Bellare">Mihir Bellare</a>, Tadayoshi Kohno, <a href="Jon_Callas" title="Jon Callas">Jon Callas</a>, <a href="Jesse_Walker" title="Jesse Walker">Jesse Walker</a>
</td></tr>
<tr>
<td>Veröffentlicht
</td>
<td>2008
</td></tr>
<tr>
<td>Schlüssellänge
</td>
<td>256, 512 oder 1024 Bits<br>(Die Schlüssellänge ist immer gleich der Blockgröße)
</td></tr>
<tr>
<td>Blockgröße
</td>
<td>256, 512 oder 1024 Bits
</td></tr>
<tr>
<td>Runden
</td>
<td>72 für 256-Bit Blockgröße<br>72 für 512-Bit Blockgröße<br>80 für 1024-Bit Blockgröße
</td></tr>
</tbody></table>
<p><b>Threefish</b> ist eine <a href="Blockverschl%C3%BCsselung" title="Blockverschlüsselung">Blockverschlüsselung</a>, entwickelt als Teil der <a href="Kryptologische_Hashfunktion" class="mw-redirect" title="Kryptologische Hashfunktion">kryptographischen Hashfunktion</a> <a href="Skein" title="Skein">Skein</a>, welche am <a href="NIST" class="mw-redirect" title="NIST">NIST</a>-Auswahlverfahren zu <a href="SHA-3" title="SHA-3">SHA-3</a> teilnahm. Um zeitliche <a href="Seitenkanalattacke" title="Seitenkanalattacke">Seitenkanalattacken</a> (Rechenzeitangriffe) zu erschweren, verwendet Threefish keine <a href="S-Box" title="S-Box">S-Boxen</a> oder andere Lookup-Tabellen. Die <a href="Konfusion_(Kryptologie)" title="Konfusion (Kryptologie)">notwendige Nichtlinearität</a> wird nur durch die <a href="Addition" title="Addition">Addition</a> realisiert.<sup id="cite_ref-skein_1-0" class="reference"><a href="#cite_note-skein-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup>
</p><p>Ein Teil des Entwicklungsteams arbeitete bereits beim Entwurf der Blockverschlüsselungen <a href="Twofish" title="Twofish">Twofish</a> und <a href="Blowfish" title="Blowfish">Blowfish</a> zusammen, die allerdings eine andere Struktur aufweisen.
</p>
<div class="mw-heading mw-heading2"><h2 id="Funktionsweise">Funktionsweise</h2></div>
<p>Threefisch ist eine sogenannte ARX-Chiffre, da sie nur Additionen, <a href="Bitweiser_Operator#Zyklische_Verschiebung" title="Bitweiser Operator">Rotationen</a> mit konstanter Weite und <a href="Bitweiser_Operator#XOR" title="Bitweiser Operator">XOR-Verknüpfungen</a> als <a href="Kryptographisches_Primitiv" title="Kryptographisches Primitiv">kryptografische Primitive</a> verwendet.
</p><p>Threefish ist eine sogenannte <i>tweakable</i> Blockverschlüsselung, was bedeutet, dass über einen zusätzlichen Steuereingang die Art der Permutationen in gewissem Umfang verändert werden kann. Der <i>Tweak</i> hat dabei eine ähnliche Funktion wie ein <a href="Initialisierungsvektor" title="Initialisierungsvektor">Initialisierungsvektor</a> oder ein <a href="Nonce" title="Nonce">Nonce</a>, kann öffentlich sein und schneller gewechselt werden als der Schlüssel. Dies erlaubt bei zeitkritischen Anwendungen wie <a href="Festplattenverschl%C3%BCsselung" title="Festplattenverschlüsselung">Festplattenverschlüsselungen</a>, jeden Datenblock unterschiedlich zu verschlüsseln, ohne dass dies zu Lasten des Datendurchsatzes geht, während bei vielen Blockchiffren die Änderung des Primärschlüssels vergleichsweise zeitaufwändig ist.
</p><p>Ein <a href="Datenblock" title="Datenblock">Datenblock</a> besteht aus 4, 8 oder 16 <a href="Datenwort" title="Datenwort">Wörtern</a> von je 64 <a href="Bit" title="Bit">Bit</a>. In jeder Runde werden Paare von zwei Wörtern aus je einer von zwei Blockhälften durch die MIX-Funktion modifiziert, und anschließend werden die Wörter innerhalb jeder Blockhälfte permutiert, so dass jedes Wort in der nächsten Runde für die MIX-Operation mit einem anderen gepaart wird. Die MIX-Funktion besteht aus den elementaren Operationen Addition modulo <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle 2^{64}}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msup>
<mn>2</mn>
<mrow class="MJX-TeXAtom-ORD">
<mn>64</mn>
</mrow>
</msup>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle 2^{64}}</annotation>
</semantics>
</math></span><img src="./_assets_/eb734a37dd21ce173a46342d1cc64c92/ecfb4b886be67f9e99c7fdfecc364be7ba3cc7f9.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:3.039ex; height:2.676ex;" alt="{\displaystyle 2^{64}}" loading="lazy"></span>, Bitrotation und XOR-Verknüpfung:
</p>
<dl><dd><span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle B\leftarrow B+A;\;\;A\leftarrow A\lll R_{i,j};\;\;A\leftarrow A\oplus B}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>B</mi>
<mo stretchy="false">←<!-- ← --></mo>
<mi>B</mi>
<mo>+</mo>
<mi>A</mi>
<mo>;</mo>
<mspace width="thickmathspace"></mspace>
<mspace width="thickmathspace"></mspace>
<mi>A</mi>
<mo stretchy="false">←<!-- ← --></mo>
<mi>A</mi>
<mo>⋘<!-- ⋘ --></mo>
<msub>
<mi>R</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>i</mi>
<mo>,</mo>
<mi>j</mi>
</mrow>
</msub>
<mo>;</mo>
<mspace width="thickmathspace"></mspace>
<mspace width="thickmathspace"></mspace>
<mi>A</mi>
<mo stretchy="false">←<!-- ← --></mo>
<mi>A</mi>
<mo>⊕<!-- ⊕ --></mo>
<mi>B</mi>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle B\leftarrow B+A;\;\;A\leftarrow A\lll R_{i,j};\;\;A\leftarrow A\oplus B}</annotation>
</semantics>
</math></span><img src="./_assets_/eb734a37dd21ce173a46342d1cc64c92/0d42d0857556dc372dda6d831479027c849cf467.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -1.005ex; width:43.265ex; height:2.843ex;" alt="{\displaystyle B\leftarrow B+A;\;\;A\leftarrow A\lll R_{i,j};\;\;A\leftarrow A\oplus B}" loading="lazy"></span></dd></dl>
<p>Die Rotationsweite <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle R_{i,j}}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msub>
<mi>R</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>i</mi>
<mo>,</mo>
<mi>j</mi>
</mrow>
</msub>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle R_{i,j}}</annotation>
</semantics>
</math></span><img src="./_assets_/eb734a37dd21ce173a46342d1cc64c92/7bb6f9df8716f0eb2d1e8bc277932500b81eb62b.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -1.005ex; width:3.699ex; height:2.843ex;" alt="{\displaystyle R_{i,j}}" loading="lazy"></span> hängt von der Runde und vom Wortpaar ab und folgt einem Muster, das sich alle acht Runden wiederholt. Die Wortpermutation ist in jeder Runde gleich. Nach immer vier Runden, und auch vor der ersten Runde, wird zu jedem Blockwort ein Rundenschlüssel-Wort addiert.
</p><p>Die Schlüsselgröße ist gleich der Blockgröße, und der Tweak besteht unabhängig davon aus zwei Wörtern. Zur Schlüsseleinteilung wird zuerst ein zusätzliches Schlüsselwort berechnet, indem alle Schlüsselwörter und eine Konstante miteinander XOR-verknüpft werden, und ein drittes Tweak-Wort wird durch XOR der beiden gegebenen gebildet. Jeder Rundenschlüssel besteht aus 4, 8 bzw. 16 der Schlüsselwörter, die von einem zum nächsten Rundenschlüssel durchrotiert werden, d. h. für jeden Rundenschlüssel wird ein anderes Wort weggelassen. Zum letzten Wort des Rundenschlüssels wird die Rundennummer addiert. Zum zweit- und drittletzten Rundenschlüsselwort wird je ein Tweak-Wort addiert; die drei Tweak-Wörter werden ebenfalls durchrotiert, so dass jedes Mal zwei andere angewandt werden.
</p><p>Im Zuge des SHA-3-Wettbewerbs wurden von den Entwicklern zwei Änderungen vorgenommen. Für Skein Version 1.2 wurden die Rotationsweiten der MIX-Funktion geändert, um die <a href="Diffusion_(Kryptologie)" title="Diffusion (Kryptologie)">Diffusionseigenschaften</a> zu verbessern. Für Version 1.3 wurde die Konstante geändert, die bei der Schlüsseleinteilung mit den Schlüsselwörtern XOR-verknüpft wird, um eine bestimmte Angriffsmethode gegen ARX-Chiffren (<span style="font-style:normal;font-weight:normal"><a href="Englische_Sprache" title="Englische Sprache">englisch</a></span> <span lang="en-Latn" style="font-style:italic"><i>rotational cryptanalysis</i></span>) zu erschweren.
</p>
<div class="mw-heading mw-heading2"><h2 id="Programmierung">Programmierung</h2></div>
<p><a href="Implementierung" title="Implementierung">Implementierung</a> von Threefish (neueste Version) mit 256 Bit Blockgröße in <a href="C%2B%2B" title="C++">C++</a>:
</p>
<div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="cp">#include</span><span class="w"> </span><span class="cpf"><stdint.h></span>
<span class="k">typedef</span><span class="w"> </span><span class="kt">uint64_t</span><span class="w"> </span><span class="n">U64</span><span class="p">;</span>
<span class="k">static</span><span class="w"> </span><span class="kr">inline</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">mix</span><span class="p">(</span><span class="n">U64</span><span class="w"> </span><span class="o">&</span><span class="n">a</span><span class="p">,</span><span class="w"> </span><span class="n">U64</span><span class="w"> </span><span class="o">&</span><span class="n">b</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">r</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">b</span><span class="w"> </span><span class="o">+=</span><span class="w"> </span><span class="n">a</span><span class="p">;</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="n">r</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="o">>></span><span class="w"> </span><span class="p">(</span><span class="mi">64</span><span class="o">-</span><span class="n">r</span><span class="p">);</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="o">^=</span><span class="w"> </span><span class="n">b</span><span class="p">;</span>
<span class="p">}</span>
<span class="kt">void</span><span class="w"> </span><span class="nf">tf_256</span><span class="p">(</span><span class="n">U64</span><span class="w"> </span><span class="n">b</span><span class="p">[</span><span class="mi">4</span><span class="p">],</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="n">U64</span><span class="w"> </span><span class="n">key</span><span class="p">[</span><span class="mi">4</span><span class="p">],</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="n">U64</span><span class="w"> </span><span class="n">tw</span><span class="p">[</span><span class="mi">2</span><span class="p">],</span><span class="w"> </span><span class="kt">unsigned</span><span class="w"> </span><span class="n">c</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">9</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">U64</span><span class="w"> </span><span class="n">t</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="n">tw</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span><span class="w"> </span><span class="n">tw</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span><span class="w"> </span><span class="n">tw</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="w"> </span><span class="o">^</span><span class="w"> </span><span class="n">tw</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="w"> </span><span class="p">};</span>
<span class="w"> </span><span class="n">U64</span><span class="w"> </span><span class="n">k</span><span class="p">[</span><span class="mi">5</span><span class="p">];</span><span class="w"> </span><span class="n">k</span><span class="p">[</span><span class="mi">4</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mh">0x1BD11BDAA9FC1A22</span><span class="p">;</span>
<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="o">=</span><span class="mi">0</span><span class="w"> </span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o"><</span><span class="mi">4</span><span class="w"> </span><span class="p">;</span><span class="w"> </span><span class="o">++</span><span class="n">i</span><span class="p">)</span><span class="w"> </span><span class="n">k</span><span class="p">[</span><span class="mi">4</span><span class="p">]</span><span class="w"> </span><span class="o">^=</span><span class="w"> </span><span class="n">k</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">key</span><span class="p">[</span><span class="n">i</span><span class="p">];</span>
<span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">unsigned</span><span class="w"> </span><span class="n">g</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">2</span><span class="o">*</span><span class="n">c</span><span class="p">;</span><span class="w"> </span><span class="c1">// Zahl der Runden = 8*c</span>
<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="kt">unsigned</span><span class="w"> </span><span class="n">s</span><span class="o">=</span><span class="mi">0</span><span class="w"> </span><span class="p">;;)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="c1">// Addiere Schlüssel, Tweak und Rundennummer:</span>
<span class="w"> </span><span class="n">b</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="w"> </span><span class="o">+=</span><span class="w"> </span><span class="n">k</span><span class="p">[</span><span class="mi">0</span><span class="p">];</span><span class="w"> </span><span class="n">b</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="w"> </span><span class="o">+=</span><span class="w"> </span><span class="n">k</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">t</span><span class="p">[</span><span class="mi">0</span><span class="p">];</span>
<span class="w"> </span><span class="n">b</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="w"> </span><span class="o">+=</span><span class="w"> </span><span class="n">k</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">t</span><span class="p">[</span><span class="mi">1</span><span class="p">];</span><span class="w"> </span><span class="n">b</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span><span class="w"> </span><span class="o">+=</span><span class="w"> </span><span class="n">k</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">s</span><span class="o">++</span><span class="p">;</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">s</span><span class="w"> </span><span class="o">></span><span class="w"> </span><span class="n">g</span><span class="p">)</span><span class="w"> </span><span class="k">break</span><span class="p">;</span>
<span class="w"> </span><span class="c1">// vier Runden:</span>
<span class="w"> </span><span class="n">mix</span><span class="p">(</span><span class="n">b</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span><span class="w"> </span><span class="n">b</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span><span class="w"> </span><span class="mi">14</span><span class="p">);</span><span class="w"> </span><span class="n">mix</span><span class="p">(</span><span class="n">b</span><span class="p">[</span><span class="mi">3</span><span class="p">],</span><span class="w"> </span><span class="n">b</span><span class="p">[</span><span class="mi">2</span><span class="p">],</span><span class="w"> </span><span class="mi">16</span><span class="p">);</span>
<span class="w"> </span><span class="n">mix</span><span class="p">(</span><span class="n">b</span><span class="p">[</span><span class="mi">3</span><span class="p">],</span><span class="w"> </span><span class="n">b</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span><span class="w"> </span><span class="mi">52</span><span class="p">);</span><span class="w"> </span><span class="n">mix</span><span class="p">(</span><span class="n">b</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span><span class="w"> </span><span class="n">b</span><span class="p">[</span><span class="mi">2</span><span class="p">],</span><span class="w"> </span><span class="mi">57</span><span class="p">);</span>
<span class="w"> </span><span class="n">mix</span><span class="p">(</span><span class="n">b</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span><span class="w"> </span><span class="n">b</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span><span class="w"> </span><span class="mi">23</span><span class="p">);</span><span class="w"> </span><span class="n">mix</span><span class="p">(</span><span class="n">b</span><span class="p">[</span><span class="mi">3</span><span class="p">],</span><span class="w"> </span><span class="n">b</span><span class="p">[</span><span class="mi">2</span><span class="p">],</span><span class="w"> </span><span class="mi">40</span><span class="p">);</span>
<span class="w"> </span><span class="n">mix</span><span class="p">(</span><span class="n">b</span><span class="p">[</span><span class="mi">3</span><span class="p">],</span><span class="w"> </span><span class="n">b</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span><span class="w"> </span><span class="mi">5</span><span class="p">);</span><span class="w"> </span><span class="n">mix</span><span class="p">(</span><span class="n">b</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span><span class="w"> </span><span class="n">b</span><span class="p">[</span><span class="mi">2</span><span class="p">],</span><span class="w"> </span><span class="mi">37</span><span class="p">);</span>
<span class="w"> </span><span class="c1">// Addiere Schlüssel und Tweak um 1 Wort rotiert und Rundennummer:</span>
<span class="w"> </span><span class="n">b</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="w"> </span><span class="o">+=</span><span class="w"> </span><span class="n">k</span><span class="p">[</span><span class="mi">1</span><span class="p">];</span><span class="w"> </span><span class="n">b</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="w"> </span><span class="o">+=</span><span class="w"> </span><span class="n">k</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">t</span><span class="p">[</span><span class="mi">1</span><span class="p">];</span>
<span class="w"> </span><span class="n">b</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="w"> </span><span class="o">+=</span><span class="w"> </span><span class="n">k</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">t</span><span class="p">[</span><span class="mi">2</span><span class="p">];</span><span class="w"> </span><span class="n">b</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span><span class="w"> </span><span class="o">+=</span><span class="w"> </span><span class="n">k</span><span class="p">[</span><span class="mi">4</span><span class="p">]</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">s</span><span class="o">++</span><span class="p">;</span>
<span class="w"> </span><span class="c1">// Rotiere Schlüssel und Tweak je um 2 Wörter:</span>
<span class="w"> </span><span class="n">U64</span><span class="w"> </span><span class="n">h</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">k</span><span class="p">[</span><span class="mi">0</span><span class="p">];</span><span class="w"> </span><span class="n">k</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">k</span><span class="p">[</span><span class="mi">2</span><span class="p">];</span><span class="w"> </span><span class="n">k</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">k</span><span class="p">[</span><span class="mi">4</span><span class="p">];</span>
<span class="w"> </span><span class="n">k</span><span class="p">[</span><span class="mi">4</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">k</span><span class="p">[</span><span class="mi">1</span><span class="p">];</span><span class="w"> </span><span class="n">k</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">k</span><span class="p">[</span><span class="mi">3</span><span class="p">];</span><span class="w"> </span><span class="n">k</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">h</span><span class="p">;</span>
<span class="w"> </span><span class="n">h</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">t</span><span class="p">[</span><span class="mi">2</span><span class="p">];</span><span class="w"> </span><span class="n">t</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">t</span><span class="p">[</span><span class="mi">1</span><span class="p">];</span><span class="w"> </span><span class="n">t</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">t</span><span class="p">[</span><span class="mi">0</span><span class="p">];</span><span class="w"> </span><span class="n">t</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">h</span><span class="p">;</span>
<span class="w"> </span><span class="c1">// vier Runden:</span>
<span class="w"> </span><span class="n">mix</span><span class="p">(</span><span class="n">b</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span><span class="w"> </span><span class="n">b</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span><span class="w"> </span><span class="mi">25</span><span class="p">);</span><span class="w"> </span><span class="n">mix</span><span class="p">(</span><span class="n">b</span><span class="p">[</span><span class="mi">3</span><span class="p">],</span><span class="w"> </span><span class="n">b</span><span class="p">[</span><span class="mi">2</span><span class="p">],</span><span class="w"> </span><span class="mi">33</span><span class="p">);</span>
<span class="w"> </span><span class="n">mix</span><span class="p">(</span><span class="n">b</span><span class="p">[</span><span class="mi">3</span><span class="p">],</span><span class="w"> </span><span class="n">b</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span><span class="w"> </span><span class="mi">46</span><span class="p">);</span><span class="w"> </span><span class="n">mix</span><span class="p">(</span><span class="n">b</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span><span class="w"> </span><span class="n">b</span><span class="p">[</span><span class="mi">2</span><span class="p">],</span><span class="w"> </span><span class="mi">12</span><span class="p">);</span>
<span class="w"> </span><span class="n">mix</span><span class="p">(</span><span class="n">b</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span><span class="w"> </span><span class="n">b</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span><span class="w"> </span><span class="mi">58</span><span class="p">);</span><span class="w"> </span><span class="n">mix</span><span class="p">(</span><span class="n">b</span><span class="p">[</span><span class="mi">3</span><span class="p">],</span><span class="w"> </span><span class="n">b</span><span class="p">[</span><span class="mi">2</span><span class="p">],</span><span class="w"> </span><span class="mi">22</span><span class="p">);</span>
<span class="w"> </span><span class="n">mix</span><span class="p">(</span><span class="n">b</span><span class="p">[</span><span class="mi">3</span><span class="p">],</span><span class="w"> </span><span class="n">b</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span><span class="w"> </span><span class="mi">32</span><span class="p">);</span><span class="w"> </span><span class="n">mix</span><span class="p">(</span><span class="n">b</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span><span class="w"> </span><span class="n">b</span><span class="p">[</span><span class="mi">2</span><span class="p">],</span><span class="w"> </span><span class="mi">32</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
</pre></div>
<div class="mw-heading mw-heading2"><h2 id="Einzelnachweise">Einzelnachweise</h2></div>
<ol class="references">
<li id="cite_note-skein-1"><span class="mw-cite-backlink"><a href="#cite_ref-skein_1-0">↑</a></span> <span class="reference-text"><span class="cite">Ferguson et al: <a rel="nofollow" class="external text" href="https://web.archive.org/web/20140824053109/http://www.skein-hash.info/sites/default/files/skein1.3.pdf"><i>The Skein Hash Function Family.</i></a> (PDF; 479 kB) 1. Oktober 2010, archiviert vom <style data-mw-deduplicate="TemplateStyles:r250917974">
/* start https://de.wikipedia.org/ */
.mw-parser-output .dewiki-iconexternal>a{background-position:center right!important;background-repeat:no-repeat!important}body.skin-minerva .mw-parser-output .dewiki-iconexternal>a{background-image:url("./_mw_/OOjs_UI_icon_external-link-ltr-progressive.svg")!important;background-size:10px!important;padding-right:13px!important}body.skin-timeless .mw-parser-output .dewiki-iconexternal>a,body.skin-monobook .mw-parser-output .dewiki-iconexternal>a{background-image:url("./_mw_/MediaWiki_external_link_icon.svg")!important;padding-right:13px!important}body.skin-vector .mw-parser-output .dewiki-iconexternal>a{background-image:url("./_mw_/Link.ernal-small-ltr-progressive.svg")!important;background-size:0.857em!important;padding-right:1em!important}
/* end https://de.wikipedia.org/ */
</style><span class="dewiki-iconexternal"><a class="external text" href="https://redirecter.toolforge.org/?url=http%3A%2F%2Fwww.skein-hash.info%2Fsites%2Fdefault%2Ffiles%2Fskein1.3.pdf">Original</a></span> (nicht mehr online verfügbar) am <span style="white-space:nowrap;">24. August 2014</span><span>;</span><span class="Abrufdatum"> abgerufen am 28. März 2013</span>.</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&rfr_id=info%3Asid%2Fde.wikipedia.org%3AThreefish&rft.title=The+Skein+Hash+Function+Family&rft.description=The+Skein+Hash+Function+Family&rft.identifier=https%3A%2F%2Fweb.archive.org%2Fweb%2F20140824053109%2Fhttp%3A%2F%2Fwww.skein-hash.info%2Fsites%2Fdefault%2Ffiles%2Fskein1.3.pdf&rft.creator=Ferguson+et+al&rft.source=http://www.skein-hash.info/sites/default/files/skein1.3.pdf"> </span></span>
</li>
</ol></div><!--htdig_noindex--><div><div class="zim-footer">
Dieser Artikel wurde von <a class="external text" title="Zuletzt bearbeitet am 2025-06-03" href="https://de.wikipedia.org/wiki/?title=Threefish&oldid=256659423">Wikipedia</a> herausgegeben. Der Text ist unter <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.de">Creative Commons Attribution-Share Alike 4.0</a> verfügbar, sofern nicht anders angegeben. Für die Mediendateien können zusätzliche Bedingungen gelten.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
<script src="./_webp_/webpHandler.js"></script>
</body></html>